package itcz.example.pattern.structure_type.proxy.jdk_proxy;


import java.lang.reflect.Proxy;

/**
 * ProxyFactory不是代理类，代理类是在运行过程中动态生成，使用Arthas工具查看
 */
public class ProxyFactory {

    private final TrainStation trainStation = new TrainStation();

    public SellTickets getProxyObject() {
        /*
         通过Proxy动态创建动态代理类
         */
        return (SellTickets) Proxy.newProxyInstance(trainStation.getClass().getClassLoader(), trainStation.getClass().getInterfaces(),
                (proxy, method, args) -> {
                    /*
                      proxy跟return返回的是同一个对象，处理器方法中不使用
                     */
                    System.out.println("执行了invoke方法");
                    return method.invoke(trainStation, args);
                });
    }
}
